大文件的上传一般通过FTP协议,而一般小的文件可以通过http协议来完成
1 通过asp.net 完成图片的上传
1.1 创建html页面
注意:1 method="post" ;2 enctype="multipart/form-data"; 3 <input type="file" />
1.2 创建一般处理程序.ashx
注意:1 创建文件保存路径using System;using System.Collections.Generic;using System.IO;using System.Linq;using System.Web;namespace _05_文件的上传与下载{ ////// FileUpload 的摘要说明 /// public class FileUpload : IHttpHandler { public void ProcessRequest(HttpContext context) { context.Response.ContentType = "text/html"; //01 获取文件 HttpPostedFile pf = context.Request.Files["imgUpLoad"]; //02 创建文件保存路径 string savePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory+"Upload/"+pf.FileName); //03 保存文件 pf.SaveAs(savePath); //04 显示上传的文件 context.Response.Write(" "); } public bool IsReusable { get { return false; } } }}
2 上传文件格式的验证,假设规定只能上传,gif的图片
我们可以在HTML通过jQuery来进行验证,也可以在.ashx中进行验证
2.1 修改ashx文件
using System;using System.Collections.Generic;using System.IO;using System.Linq;using System.Web;namespace _05_文件的上传与下载{ ////// FileUpload 的摘要说明 /// public class FileUpload : IHttpHandler { public void ProcessRequest(HttpContext context) { context.Response.ContentType = "text/html"; //01 获取文件 HttpPostedFile pf = context.Request.Files["imgUpLoad"]; //01-01 获取文件后缀名 string extName = pf.FileName.Substring(pf.FileName.LastIndexOf('.')); if (extName != ".gif" || extName != ".Gif") { context.Response.Write("请上传.gif图片"); return; } //02 创建文件保存路径 string savePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory+"Upload/"+pf.FileName); //03 保存文件 pf.SaveAs(savePath); //04 显示上传的文件 context.Response.Write(" "); } public bool IsReusable { get { return false; } } }}
2.2 引入jQuery,修改HTML页面
3 如果文件只放在Upload文件夹下,随着时间的增长,文件势必会越来越多不利于寻找,可以根据日期建立相应文件夹
using System;using System.Collections.Generic;using System.IO;using System.Linq;using System.Web;namespace _05_文件的上传与下载{ ////// FileUpload 的摘要说明 /// public class FileUpload : IHttpHandler { public void ProcessRequest(HttpContext context) { context.Response.ContentType = "text/html"; //01 获取文件 HttpPostedFile pf = context.Request.Files["imgUpLoad"]; //01-01 获取文件后缀名 string extName = pf.FileName.Substring(pf.FileName.LastIndexOf('.')); if (extName != ".gif" && extName != ".GIF") { context.Response.Write("请上传.gif图片"); return; } //02 创建文件保存路径 string savePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory+"Upload\\"); //02-01 根据日期创建文件夹 DateTime dt = DateTime.Now; savePath += dt.Year + "\\" + dt.Month + "\\" + dt.Day ; if (!Directory.Exists(savePath)) { //创建文件夹 Directory.CreateDirectory(savePath); } //02-02文 件名为当前时间 savePath += "\\"+ dt.ToString().Replace(':','-')+".gif"; //03 保存文件 pf.SaveAs(savePath); //04 显示上传的文件 context.Response.Write(" "); } public bool IsReusable { get { return false; } } }}
4 文件下载
using System;using System.Collections.Generic;using System.IO;using System.Linq;using System.Web;namespace _05_文件的上传与下载{ ////// FileDownload 的摘要说明 /// public class FileDownload : IHttpHandler { public void ProcessRequest(HttpContext context) { string f = context.Request["f"]; context.Response.ContentType = "application/octet-stream"; context.Response.AddHeader("Content-Disposition","attachment;filename=\""+f+"\";"); context.Response.WriteFile(Path.Combine(AppDomain.CurrentDomain.BaseDirectory,f)); } public bool IsReusable { get { return false; } } }}